// admin/system/service/sys_role_dept_service.go
package service

import (
	repo "go-admin1/admin/system/dao"
	"go-admin1/admin/system/model"
)

// SysRoleDeptService 角色部门关联服务接口
type SysRoleDeptService interface {
	Create(roleDept *model.SysRoleDept) error
	GetByRoleID(roleID int64) ([]*model.SysRoleDept, error)
	GetByDeptID(deptID int64) ([]*model.SysRoleDept, error)
	DeleteByRoleID(roleID int64) error
	DeleteByDeptID(deptID int64) error
	DeleteByRoleIDAndDeptID(roleID, deptID int64) error
	ListDeptIDsByRoleID(roleID int64) ([]int64, error)
	ListRoleIDsByDeptID(deptID int64) ([]int64, error)
}

type sysRoleDeptService struct {
	roleDeptDao repo.SysRoleDeptDao
}

func (s sysRoleDeptService) Create(roleDept *model.SysRoleDept) error {
	return s.roleDeptDao.Create(roleDept)
}

func (s sysRoleDeptService) GetByRoleID(roleID int64) ([]*model.SysRoleDept, error) {
	roleDepts, err := s.roleDeptDao.GetByRoleID(roleID)
	if err != nil {
		return nil, err
	}
	return roleDepts, nil
}

func (s sysRoleDeptService) GetByDeptID(deptID int64) ([]*model.SysRoleDept, error) {
	roleDepts, err := s.roleDeptDao.GetByDeptID(deptID)
	if err != nil {
		return nil, err
	}
	return roleDepts, nil
}

func (s sysRoleDeptService) DeleteByRoleID(roleID int64) error {
	return s.roleDeptDao.DeleteByRoleID(roleID)
}

func (s sysRoleDeptService) DeleteByDeptID(deptID int64) error {
	return s.roleDeptDao.DeleteByDeptID(deptID)
}

func (s sysRoleDeptService) DeleteByRoleIDAndDeptID(roleID, deptID int64) error {
	return s.roleDeptDao.DeleteByRoleIDAndDeptID(roleID, deptID)
}

func (s sysRoleDeptService) ListDeptIDsByRoleID(roleID int64) ([]int64, error) {
	deptIDs, err := s.roleDeptDao.ListDeptIDsByRoleID(roleID)
	if err != nil {
		return nil, err
	}
	return deptIDs, nil
}

func (s sysRoleDeptService) ListRoleIDsByDeptID(deptID int64) ([]int64, error) {
	roleIDs, err := s.roleDeptDao.ListRoleIDsByDeptID(deptID)
	if err != nil {
		return nil, err
	}
	return roleIDs, nil
}

// NewSysRoleDeptService 创建角色部门关联服务实例
func NewSysRoleDeptService() SysRoleDeptService {
	return &sysRoleDeptService{
		roleDeptDao: repo.NewSysRoleDeptDao(),
	}
}
